/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DAO.util.ConectaBanco;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.Jogador;
import model.Time;
import model.TimeJogo;

/**
 *
 * @author Alex
 */
public class TimeJogoDAO {

    public boolean criar(TimeJogo timeJogo) {
        try {

            Connection conexao = ConectaBanco.getConexao();

            String sql = "insert into time_jogo( id_time,id_jogo,pontos1,pontos2)values (?,?,?,?)";

            PreparedStatement pstmt = conexao.prepareStatement(sql);

            pstmt.setInt(1, timeJogo.getTime().getId_time());
            pstmt.setInt(2, timeJogo.getJogo().getId());
            pstmt.setFloat(3, timeJogo.getPontos1());
            pstmt.setFloat(4, timeJogo.getPontos2());

            pstmt.execute();
            conexao.close();

            return true;

        } catch (SQLException sql) {
            sql.printStackTrace();
            return false;

        }

    }

    public boolean criarJogo(TimeJogo timeJogo) {
        try {

            Connection conexao = ConectaBanco.getConexao();

            String sql = "insert into time_jogo( id_time,id_jogo,pontos1,pontos2,posicao)values (?,?,?,?,?)";

            PreparedStatement pstmt = conexao.prepareStatement(sql);

            pstmt.setInt(1, 9999);
            pstmt.setInt(2, timeJogo.getJogo().getId());
            pstmt.setFloat(3, 0);
            pstmt.setFloat(4, 0);
            pstmt.setInt(5, timeJogo.getPosicao());

            pstmt.execute();
            conexao.close();

            return true;

        } catch (SQLException sql) {
            sql.printStackTrace();
            return false;

        }

    }

    public ArrayList<TimeJogo> buscarPorJogo(int idJogo) {
        ArrayList<TimeJogo> timeJogos = new ArrayList<TimeJogo>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select * from time_jogo where id_jogo= ?";

            PreparedStatement pst = conexao.prepareStatement(sql);

            pst.setInt(1, idJogo);
            ResultSet rs = pst.executeQuery();
            TimeDAO timeDAO = new TimeDAO();
            JogoDAO jogoDAO = new JogoDAO();

            while (rs.next()) {
                TimeJogo timeJogo = new TimeJogo();
                timeJogo.setJogo(jogoDAO.buscarPorId(rs.getInt("id_jogo")));
                timeJogo.setPontos1(rs.getFloat("pontos1"));
                timeJogo.setPontos2(rs.getFloat("pontos2"));
                timeJogo.setTime(timeDAO.buscarPorId(rs.getInt("id_time")));

                timeJogos.add(timeJogo);
            }

            conexao.close();
            return timeJogos;

        } catch (Exception sql) {
            System.out.println("Erro ao buscar um aluno" + sql.getMessage());
            return null;
        }

    }

    public ArrayList<TimeJogo> buscarPorChave(int id_chave) {
        ArrayList<TimeJogo> timeJogos = new ArrayList<TimeJogo>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select tj.id, tj.id_time, id_jogo, pontos1 ,pontos2, posicao from time_jogo as tj, chave as c, jogo as j where j.id_chave =c.id and \n"
                    + "tj.id_jogo = j.id and c.id =? order by c.id ,  tj.posicao ,tj.id_jogo ";

            PreparedStatement pst = conexao.prepareStatement(sql);

            pst.setInt(1, id_chave);
            ResultSet rs = pst.executeQuery();
            TimeDAO timeDAO = new TimeDAO();
            JogoDAO jogoDAO = new JogoDAO();

            while (rs.next()) {
                TimeJogo timeJogo = new TimeJogo();
                timeJogo.setId(rs.getInt("id"));
               // timeJogo.setJogo(jogoDAO.buscarPorId(rs.getInt("id_jogo")));
                timeJogo.setPontos1(rs.getFloat("pontos1"));
                timeJogo.setPontos2(rs.getFloat("pontos2"));
              //  timeJogo.setTime(timeDAO.buscarPorId(rs.getInt("id_time")));
                timeJogo.setPosicao(rs.getInt("posicao"));

                timeJogos.add(timeJogo);
            }

            conexao.close();
            return timeJogos;

        } catch (Exception sql) {
            System.out.println("Erro ao buscar um aluno" + sql.getMessage());
            return null;
        }

    }
    
        public ArrayList<TimeJogo> abastecerChave(int chave1, int chave2) {
        ArrayList<TimeJogo> timeJogos = new ArrayList<TimeJogo>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select tj.id, tj.id_time, id_jogo, pontos1 ,pontos2, posicao,hora from time_jogo as tj, chave as c, jogo as j where j.id_chave =c.id and\n" +
"tj.id_jogo = j.id and c.id between ? and ? order by tj.id_jogo, posicao; ";

            PreparedStatement pst = conexao.prepareStatement(sql);

            pst.setInt(1, chave1);
            pst.setInt(2,chave2);
            ResultSet rs = pst.executeQuery();
            TimeDAO timeDAO = new TimeDAO();
            JogoDAO jogoDAO = new JogoDAO();

            while (rs.next()) {
                TimeJogo timeJogo = new TimeJogo();
                timeJogo.setId(rs.getInt("id"));
                timeJogo.setJogo(jogoDAO.buscarPorId(rs.getInt("id_jogo")));
                timeJogo.setPontos1(rs.getFloat("pontos1"));
                timeJogo.setPontos2(rs.getFloat("pontos2"));
                timeJogo.setTime(timeDAO.buscarPorId(rs.getInt("id_time")));
                timeJogo.setPosicao(rs.getInt("posicao"));

                timeJogos.add(timeJogo);
            }

            conexao.close();
            return timeJogos;

        } catch (Exception sql) {
            System.out.println("Erro ao buscar um aluno" + sql.getMessage());
            return null;
        }

    }

    public boolean atualizar(TimeJogo timeJogo) {
        try {

            Connection conexao = ConectaBanco.getConexao();
            String sql = "update time_jogo set  id_time=?, pontos1=? where  posicao= ? and id=?";
            PreparedStatement pstmt = conexao.prepareStatement(sql);

            pstmt.setInt(1,timeJogo.getTime().getId_time());
            pstmt.setFloat(2, timeJogo.getPontos1());
            pstmt.setFloat(3,timeJogo.getPosicao());
            pstmt.setInt(4, timeJogo.getId());

            pstmt.execute();
            conexao.close();

            return true;
        } catch (SQLException sql) {
            return false;

        }
    }

    public boolean limparTimeJogo() {
        try {

            Connection conexao = ConectaBanco.getConexao();
            String sql = "update time_jogo set  id_time=9999";
            PreparedStatement pstmt = conexao.prepareStatement(sql);

            pstmt.execute();
            conexao.close();

            return true;
        } catch (SQLException sql) {
            return false;

        }
    }

    public void abastecerTimeJogo() {
        TimeDAO timeDAO = new TimeDAO();

        TimeJogoDAO timeJogoDAO = new TimeJogoDAO();
        int c1 = 0;
        int c2 = 0;
        for (int i = 1; i < 13; i++) {

            ArrayList<Time> times = timeDAO.buscarTimePorChave(i);
            ArrayList<TimeJogo> posicoesTimes = timeJogoDAO.buscarPorChave(i);

            c1 = 1;

            for (TimeJogo timeJogo : posicoesTimes) {

                c2 = 0;
                for (Time time : times) {

                    c2 += 1;

                    if (c1 == 1 && c2 == 1) {
                        timeJogo.setTime(time);

                        timeJogoDAO.atualizar(timeJogo);

                    }
                    if (c1 == 4 && c2 == 2) {
                        timeJogo.setTime(time);

                        timeJogoDAO.atualizar(timeJogo);

                    }
                    if (c1 == 5 && c2 == 3) {
                        timeJogo.setTime(time);

                        timeJogoDAO.atualizar(timeJogo);

                    }
                    if (c1 == 6 && c2 == 3) {
                        timeJogo.setTime(time);

                        timeJogoDAO.atualizar(timeJogo);

                    }
                }

                c1 += 1;

            }

        }
    }

}
